#define _CRT_SECURE_NO_WARNINGS
//
///**
// * Definition for singly-linked list.
// * struct ListNode {
// *     int val;
// *     ListNode *next;
// *     ListNode(int x) : val(x), next(NULL) {}
// * };
// */
//class Solution {
//public:
//    ListNode* deleteDuplication(ListNode* head) {
//        ListNode* dummy = new ListNode(-1);
//        dummy->next = head;
//        auto p = dummy;
//
//        while (p->next)
//        {
//            auto q = p->next;
//            while (q->next && q->next->val == p->next->val) q = q->next;
//
//            if (q == p->next) p = p->next;
//            else p->next = q->next;
//        }
//
//        return dummy->next;
//    }
//};

//
//
//class Solution {
//public:
//    vector<int> twoSum(vector<int>& nums, int target) {
//        unordered_map<int, int> heap;
//
//        for (int i = 0; i < nums.size(); i++)
//        {
//            int r = target - nums[i];
//            if (heap.count(r)) return { heap[r], i };
//            heap[nums[i]] = i;
//        }
//
//        return {};
//    }
//};

//
//class Solution {
//public:
//    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//        ListNode* dummy = new ListNode(-1), * cur = dummy;
//        int tmp = 0;
//        while (l1 || l2 || tmp)
//        {
//            if (l1) tmp += l1->val, l1 = l1->next;
//            if (l2) tmp += l2->val, l2 = l2->next;
//            cur = cur->next = new ListNode(tmp % 10);
//            tmp /= 10;
//        }
//
//        return dummy->next;
//    }
//};